const fs = require('fs');
const path = require('path');

// 要扫描的目录和文件类型
const config = {
  rootDir: process.cwd(),
  includeDirs: ['src', 'build'],
  excludeDirs: [
    'node_modules',
    'dist',
    '.git',
    '.vscode',
    '.cursor',
    '.idea',
    '.vs',
    '.history'
  ],
  includeFiles: ['.ts', '.vue', '.json'],
};

// 添加目录注释
const dirComments = {
  'src': '项目源码目录',
  'build': '构建工具目录，主要包含路由自动生成相关代码',
  'router': '路由配置和类型定义',
  'pages': '小程序页面目录',
  'base': '基础包页面（首页、我的等）',
  'public': '公共分包页面（裁剪、搜索等）',
  'login': '登录分包页面',
  'aiChatPage': 'AI聊天分包页面',
  'components': '全局公共组件', // 只给 src/components 添加注释
  'api': '接口请求目录',
  'hooks': '全局通用hooks',
  'utils': '工具函数',
  'store': 'Pinia状态管理',
  'types': '全局类型定义',
  'tmui': '第三方UI组件库',
  'uni_modules': 'uni-app插件',
  'scripts': '项目工具脚本'
};

// 生成文件树
function generateFileTree(dir, prefix = '') {
  let result = '';
  const files = fs.readdirSync(dir);

  // 先过滤并排序文件
  const sortedFiles = files
    .filter(file => !config.excludeDirs.some(d => file.includes(d)))
    .sort((a, b) => {
      // 目录优先
      const aIsDir = fs.statSync(path.join(dir, a)).isDirectory();
      const bIsDir = fs.statSync(path.join(dir, b)).isDirectory();
      if (aIsDir && !bIsDir) return -1;
      if (!aIsDir && bIsDir) return 1;
      return a.localeCompare(b);
    });

  sortedFiles.forEach((file, index) => {
    const fullPath = path.join(dir, file);
    const relativePath = path.relative(config.rootDir, fullPath);
    const stats = fs.statSync(fullPath);
    const isLast = index === sortedFiles.length - 1;
    const pathParts = relativePath.split(/[/\\]/); // 兼容 Windows 路径

    if (stats.isDirectory()) {
      // 检查是否是特殊目录（uni_modules 或 tmui）的内容
      const isInSpecialDir = pathParts.some(p => p === 'uni_modules' || p === 'tmui');
      const isSpecialDirRoot = pathParts.length === 2 && (file === 'uni_modules' || file === 'tmui');
      const isSpecialDirFirstLevel = pathParts.length === 3 && pathParts[1] === (file === 'uni_modules' ? 'uni_modules' : 'tmui');

      // 处理注释
      let comment = '';
      if (dirComments[file]) {
        if (file === 'components') {
          comment = relativePath === 'src/components' ? ` # ${dirComments[file]}` : '';
        } else {
          comment = ` # ${dirComments[file]}`;
        }
      }

      // 添加目录到结果
      result += `${prefix}${isLast ? '└── ' : '├── '}${file}/${comment}\n`;

      // 决定是否继续递归
      if (!isInSpecialDir || isSpecialDirRoot) {
        result += generateFileTree(fullPath, prefix + (isLast ? '    ' : '│   '));
      }
    } else if (config.includeFiles.some(ext => file.endsWith(ext))) {
      // 不在特殊目录下的文件才显示
      const isInSpecialDir = pathParts.some(p => p === 'uni_modules' || p === 'tmui');
      if (!isInSpecialDir) {
        result += `${prefix}${isLast ? '└── ' : '├── '}${file}\n`;
      }
    }
  });

  return result;
}

// 生成 AI 上下文文件
function generateAIContext() {
  const fileTree = generateFileTree(config.rootDir);

  const content = `<file_tree>
${fileTree}
</file_tree>
`;

  fs.writeFileSync('.gitattributes', content);
  console.log('AI context file generated successfully!');
}

generateAIContext();